MC_DigitalCamSwitch_HighPrecisionを使用しています。
この例 BasicMotion_DigitalCamSwitch_HighPrecision.project
はインストールディレクトリにあります。 CODESYS 下に ..\CODESYS SoftMotion\Examples
。
この例は、の出力を使用する方法を示しています SMC_DigitalCamSwitch_HighPrecision
デジタル出力を高い時間分解能で制御します。ベッコフのEL2258端子とEL2252端子が例として使われています
注記
Beckhoffのデバイスの説明はこの例には含まれていません。これらはベンダーから直接ダウンロードして、デバイスリポジトリにインストールできます。この例を実行するには、EK1100 バスカプラー、EL2258 ターミナル、および EL2252 ターミナルが必要です
重要
この例は、EL2258のリビジョン0017およびEL2252のリビジョン0020に従って開発およびテストされました。これはあくまで一例に過ぎません。その正確性を保証するものではありません。ソースコードは使用前にテストする必要があります。必要であれば、端末の他のリビジョンに合わせて修正する必要があります
アプリケーションの構造
アプリケーションの構成は Main
プログラム、 DigitalCamSwitch_EL2258
そして DigitalCamSwitch_EL2252
ファンクションブロック、およびEL2258およびEL2252出力端子を備えたEK1100バスカプラー。
ザル DigitalCamSwitch_EL2258
そして DigitalCamSwitch_EL2252
この例ではファンクションブロックが重要な部分です。の使い方を示しています Events
の出力 SMC_DigitalCamSwitch_HighPrecision
デジタル出力をプログラムします。ファンクションブロックは、他のハードウェアにも適用できる例として理解しておく必要があります。
DigitalCamSwitch_EL2258
ファンクションブロックは、のライジングエッジで初期化されます
Enable
入力。STATE_INIT_0
とSTATE_INIT_1
ステート、OutputBufferReset
EL2258 ターミナルのシグナルが書き込まれ、aLastEventIds
配列が初期化されます。各トラックで最後に処理されたイベントの ID がこの配列に保存されます。これにより、イベントが端末に複数回転送されるのを防ぎます。初期化後 (
STATE_ACTIVE
) を指定すると、すべてのトラックが順番に処理され、各トラックに対して次のロジックが実行されます。EL2258ターミナルが最後にコマンドされたイベントをすでに受け入れているかどうかを確認します(
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter
)。トラックのすべてのイベントをループ処理します。該当するイベントのみ
ToggleEventId
が最後に処理された ID よりも大きい場合は、さらに処理されたものとみなされます。(クエリ)EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel])
)「イベント順序に関する注意」セクションを参照してください。
を変換する
Duration
イベントの EtherCAT タイムスタンプへの書き込みと、それに対応するイベントの書き込みChannelsOut[channel].OutputEventState
とChannelsOut[channel].OutputEventTime
出力。最大 5 件のイベントが発生すると、処理を中止します。
少なくとも 1 つのイベントが見つかった場合は、新しいイベントが存在することを端末に通知します (
ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1
)。
イベント順序に関する注意事項
イベントは、によって返されます。 SMC_DigitalCamSwitch_HighPrecision
配列内の各トラックのファンクションブロック。 SwitchNumber
と ToggleEventId
イベントごとに返されます。これ ToggleEventId
はトラックごとにユニークで昇順になっています。
詳細については、以下を参照してください。 SMC_CAMSWITCH_TOGGLE_EVENT。
この例では、 aLastEventIds[trackNo]
各トラックの配列には以下の内容が格納されます。 ToggleEventId
前回のファンクションブロック呼び出しで端末に最後に転送されました。 ToggleEventIds
が昇順であれば、次の呼び出しでどのイベントをまだ転送する必要があるかが正確にわかります。
どっちなのかわからないから
ToggleEventId
イベントが開始すると、valid
フラグはEventId
に加えてデータタイプ。EventId_GreaterThan
比較、これvalid
フラグはそれに応じて考慮されます。ザル
ToggleEventIds
32 ビットのデータ型であるUDINT
そのため、動作時間が長くなったり、スイッチング周波数が高くなったりすると、原則としてオーバーフローする可能性があります。その後、値は 2^32-1 から 0 に戻ります。比較関数です。EventId_GreaterThan
32 ビットのオーバーフローも考慮されます。
プロッドマッピング EL2258
ザル ChannelsOut
と ChannelsIn
の出力 DigitalCamSwitch_EL2258
ファンクションブロックは EL2258 ターミナルの各 I/O チャンネルに接続されています。以下の画像はチャンネル1のマッピングを示しています。チャネル 2 も同様ですが、アクセスする場合だけです。 ChannelsOut
と ChannelsIn
インデックスは 1 ではなく 2 です。

DigitalCamSwitch_EL2252
基本原則は以下と同じです DigitalCamSwitch_EL2258
。EL2252ターミナルはアクティブなイベントを 1 つしかプログラムできないため、シグナルの書き方が異なります
まず、ファンクションブロックは次の式で初期化されます
STATE_INIT
。それから
STATE_CHECK_FOR_EVENT
からのイベントかどうかをチェックしますSMC_DigitalCamSwitch_HighPrecision
ファンクションブロックは保留中です。イベントがある場合は、そのイベントを次の2サイクル以内にプログラムする必要があります。
出力とEtherCATタイムスタンプは最初のサイクルで書き込まれます。
Activate
出力は 0 に設定されます。2 番目のサイクルでは、
Activate
出力は 3 インチに設定されています。STATE_ACTIVATE_EVENT_IN_EL2252
。これにより、ターミナルでイベントがアクティブになります
で
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS
その後、システムはイベントが実行されるまで待機します。からのシグナルFeedback
これには端末の入力が使用されます。
プロッドマッピング EL2252

Main
メインプログラムでは、4つのスイッチ(各トラックに2つ)が設定されています。また、トラックごとにオン/オフ補正が異なりますOnComp
、 OffComp
):

このプログラムには、軸の予測を有効にし、それを常に180°/s(*)で動かすために必要な関数ブロック呼び出しが含まれています。また、 SMC_DigitalCamSwitch_HighPrecision
、 DigitalCamSwitch_EL2258
、および DigitalCamSwitch_EL2252
。ムーブメントを開始する前に、フィールドバスの電源を完全にオンにする必要があります。そうしないと、イベントを端末に送信できません。
(*)例をシンプルでわかりやすくするために、一定の動きを選択しました。ただし、 SMC_DigitalCamSwitch_HighPrecision
ファンクションブロックはあらゆる種類の動きに対応します。たとえば、アクセラレーションフェーズやカムを使ったときなど、正確なタイムスタンプも表示されます
コミッショニング
アプリケーションをビルドし、コントローラーにダウンロードします。
アプリケーションを起動します。